#sas建模 您所在的位置:网站首页 sas 模型 #sas建模

#sas建模

##sas建模| 来源: 网络整理| 查看: 265

学了一段时间的sas,也对基本的操作有了自己的理解与经验,上周五也进行了一次简单完整的sas建模,也顺便写一写关于这次建模的总结与教训哈哈哈。

0?wx_fmt=jpeg

建模背景:有关于一家银行的客户记录的数据,包括其储蓄卡/信用卡开卡时间,汇入汇出次数金额,取款存款次数金额,年龄,性别,不同方式(ATM,网银等)取款存款次数金额等50多个变量(对这几个变量印象较深),还有y值(1代表购买理财产品,0代表不够理财产品),然后就是使用logistics回归建立预测模型,预测客户是否会购买其理财产品。

0?wx_fmt=png

下面我就讲下我和同伴一起建模的过程吧,顺便也梳理一下我们的一些问题点,大致按数据预处理,变量删减,变量分析,:模型建立几个环节来进行梳理,对于问题点下周回公司请教一下老司机们嘻嘻~

part 1:数据预处理

删除“未来”数据:拿到数据的一开始,老师就提示我们这堆数据里面可能会存在跨时间的“错误”数据,什么意思?简单来说吧,我们做模型的目的是基于现在的数据来预测未来的行为,所以,我们用来建立模型的输入变量数据,必须是历史数据,即当下可以拿到。

而数据的时间截点是15.9.30,但是有些客户的数据是之后才有的,所以这类的数据是不能进入到模型训练中的,应该进行标志并删除。

平衡样本:本来一开始没有删除的时候,看了一下好坏样本(即0-1的占比)占比为9:1,符合我们的建模样本要求,但是进行上一步操作后,比例就变大了,所以这里就进行样本的平衡。

proc sort data=model2_temp1 out=model2_temp2;by y;run;

proc surveyselect data =model2_temp2

    out =model3

    seed=12345

    samprate=(0.6,1);

    strata y;

run;

part 2:变量删减

删除缺失比例&同质性超90%的观测:这个就很好理解啦,因为这些数据对于目标变量没有区分度,以及缺失太多的变量会对建模造成干扰,直接删除就好了。

删除相关性较强的变量:因为工作量很多,我们使用了聚类操作,每个簇,我们尽量就保留一个变量。

/*系统聚类,需先计算各层级的目标事件占比*/

proc means data=a noprint;

    class province; /*需要分层的变量*/

    var z; /*0-1变量*/

    output out=mean_data mean=prop;

run;

/*进行聚类操作,R方越大越好,半偏R方越小越好*/

    ods output cluster history=cluster;

    proc cluster data=mean_data method=ward outtree=tree;

    freq _freq_;

    var prop;

    id province;

run;

我们一般看每一簇的1-R²,一般如果小于0.1,我们就保留其变量,但是,有的时候簇内的变量的1-R²都很大,这个时间就要结合相关性分析的表格进行判断,选出簇内两个相关性(ccorr过程步)比较小的变量(这个确实炒鸡慢,看到眼花!!!)

好呢!搞完上面的变量删减,我们从50多个变量变成了22个变量(是不是炒鸡开心哈哈哈!)

part 3:变量分析

进行完上面的操作,得到相对比较干净的数据,然后就对其进行相关性分析,包括和y值,删除强相关的一些变量,按照变量的类型分为类别变量和连续变量进行操作。

类别变量:使用freq进行计算其0-1占比,看下会不会可以进行类别的合并。

proc freq data=train;

    tables edu*z/nocol missing;

run;

0?wx_fmt=png

连续变量:这次的变量,大多数都是连续变量,如次数金额什么的,连续变量就要用univariate啦。连续变量的处理,这里也是可以当做类别来的,但是需要是以下2种情况才可以,一个是弱同质性(超70%低90%),另一个是层级较少。

/*弱同质性*/

proc univariate data=train;

    var var1 var2 var3 var4......;  /*获得连续性变量的分位图*/

run;

/*根据实际情况,人工进行分层*/

data a;

    set train;

    if n_din>0 then numdin=1;

    else numdin=0;

run;

/*对分层后的变量进行proc freq分析*/

proc freq data=a;

    tables numdin*y/missing;

run;

/*连续变量层级较少*/

/*先把它转成类别变量进行处理,进行freq分析*/

proc freq data = train;

    tables n_csh*y/missing;

run;

/*制造0-1变量*/

data train;

    set train;

    npur_1=(n_csh



【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有